iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

今天我們要來介紹分散式系統中的一個基本概念,有三個重要特性,但我們只能同時滿足其中兩個。其中一個必定會被犧牲。來看一下為什麼吧~

一致性(Consistency)

這是指當我們進行資料更新操作時,所有的節點都會立即同步更新。因此,無論我們從哪個節點讀取資料,都會得到最新的結果。舉例來說,假設我們在一個節點上更新了一筆資料,根據一致性要求,所有節點必須立刻反映這個更新結果。但是,當Network partition發生時,由於節點之間的通訊被切斷,某些節點可能無法即時得到這個更新。為了保持一致性,系統可能會選擇拒絕讀寫請求,直到所有節點都能同步更新。因此,在這種情況下,系統的可用性會受到影響。

P.S. 當系統的各個節點因為網路問題而無法彼此通訊,這就是所謂的Network partition。

可用性(Availability)

這是指無論何時我們向系統發出讀寫請求,系統都能夠回應我們的請求,即使有些節點發生了問題。這代表即使Network partition發生時,系統仍然會接受並處理請求。但是,為了保持高可用性,系統可能會允許某些節點提供尚未同步更新的資料,導致我們從不同的節點讀取到不同的結果,這就違反了一致性。

分區容忍性(Partition Tolerance)

即使系統的不同節點之間的通訊中斷,系統仍能繼續運作。

取捨

根據上面的介紹,我們通常會選擇CP或是AP,不會選擇CA,因為現實世界的網路幾乎不可避免會面臨Network partition的風險,比如網路延遲、硬體故障、節點掉線等情況。這代表我們為了維持CA就只能使用單一節點,不然無法保持CA的原則。

例如,某些金融系統可能會偏向一致性(C)而在分區時犧牲可用性(A),以確保所有交易記錄都是正確的。而像社交媒體這樣的應用可能會偏向可用性(A),即使在分區的情況下允許一定程度的一致性犧牲,以確保用戶能夠持續使用服務。

總結

我們可以根據不同情境選擇不同的方案,不一定每種狀況都適合當下得情境,這也是需要好好注意的地方~

reference

https://www.explainthis.io/zh-hant/swe/cap-theorem


上一篇
Day 22 DB - Failure Modes
下一篇
Day 24 Microservices vs Monolithic architecture
系列文
Backend Developer的學習Roadmap30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言